package com.yyn.action;

import com.yyn.bean.UserInfoBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;

@Controller
public class UserInfoAction {

    /**
     * 要求form表单的表单控件的name属性值和action中的handler方法中的形参参数名保持一致；
     * 则可以直接将表单数据传递给action方法的形参参数
     *
     * @param userName
     * @param userPsw
     * @return
     */
    @RequestMapping("/doLogin")
    public String doLogin(String userName, String userPsw) {
        System.out.println("登录用户名：" + userName + ";密码：" + userPsw);
        return "logined";
    }

    /**
     * 要求form表单的表单控件的name属性值和action中的handler方法中的java实体类类型的形参参数的属性名保持一致；
     * 则可以直接将表单数据传递给action方法的形参参数
     * 推荐使用的常用方式
     *
     * @param userInfoBean
     * @return
     */
    @RequestMapping("/doLogin2")
    public String doLogin2(UserInfoBean userInfoBean) {
        System.out.println("登录用户名：" + userInfoBean.getUserName() + ";密码：" + userInfoBean.getUserPsw());
        return "logined";
    }

    @RequestMapping("/doLogin3")
    public String doLogin3(HttpServletRequest request) {
        // 这种方式是springmvc框架采用依赖注入的方式，初始化了一个HttpServletRequest对象
        // 这种方式是原生的Servlet的开发方式，在springmvc框架下，不推荐使用
        // 用户名
        String strAdminName = request.getParameter("userName");// 参数名要和form表单中的name属性值保持一致
        // 密码
        String strAdminPsw = request.getParameter("userPsw");
        System.out.println("登录用户名：" + strAdminName + ";密码：" + strAdminPsw);
        return "logined";
    }

    /**
     * 要求form表单的表单控件的name属性值和action中的handler方法中的形参参数名保持一致；
     * 则可以直接将表单数据传递给action方法的形参参数
     * 如果不能保持一致，则需要使用注解@RequestParam绑定到表单控件的name属性值上
     *
     * @param strUserName
     * @param strUserPsw
     * @return
     */
    @RequestMapping("/doLogin4")
    public String doLogin4(@RequestParam("userName") String strUserName, @RequestParam("userPsw") String strUserPsw) {
        System.out.println("登录用户名：" + strUserName + ";密码：" + strUserPsw);
        return "logined";
    }

    /**
     * 要求form表单的表单控件的name属性值和action中的handler方法中的java实体类类型的形参参数的属性名保持一致；
     * 则可以直接将表单数据传递给action方法的形参参数
     * 推荐使用的常用方式
     *
     * @param userInfoBean
     * @return
     */
    @RequestMapping("/doLogin20")
    public ModelAndView doLogin20(UserInfoBean userInfoBean) {
        System.out.println("登录用户名：" + userInfoBean.getUserName() + ";密码：" + userInfoBean.getUserPsw());
        // 作为一个数据载体存在
        ModelAndView mav = new ModelAndView();
        // 承载：视图文件的解析路径
        mav.setViewName("logined");
        // 承载：数据结果集（作用域范围：？）
        mav.addObject("loginedUserName", userInfoBean.getUserName());
        return mav;
    }

    /**
     * 要求form表单的表单控件的name属性值和action中的handler方法中的java实体类类型的形参参数的属性名保持一致；
     * 则可以直接将表单数据传递给action方法的形参参数
     * 推荐使用的常用方式
     *
     * @param userInfoBean
     * @return
     */
    @RequestMapping("/doLogin21")
    public String doLogin21(UserInfoBean userInfoBean, HttpServletRequest request) {
        System.out.println("登录用户名：" + userInfoBean.getUserName() + ";密码：" + userInfoBean.getUserPsw());
        // 使用注入的request对象进行数据缓存
        request.getSession().setAttribute("loginedUserName", userInfoBean.getUserName());
        return "logined";
    }
}